package cn.jzq.kotoba.modules.principle.lsp;

/**
 * 士兵使用手枪射击
 * 需求变更: 使用步枪射击.  新建步枪类, 同时修改soldier类
 * 这种模式每当有新的武器类出现, 都需要修改soldier类很不方便
 * 解决方案: 增加一个基类包含武器的特点和射击动作
 *
 * @author jzq
 * @date 2019/1/23 17:43
 */
public class LspApp {

    public static void main(String[] args) {
        Gun gun = new Gun();
        Soldier soldier = new Soldier();
        soldier.setGun(gun);
//        soldier.startShoot();

        RifleGun rifleGun = new RifleGun();
        Soldier2 soldier2 = new Soldier2();
        soldier2.setGun(gun);
        soldier2.setRifleGun(rifleGun);
//        soldier2.startRifleGunShoot();

        SoliderEx soliderEx = new SoliderEx();
        // 体现LSP原则 基类可以被子类替换
        soliderEx.setGun(new RifleGunEx());
        soliderEx.startShoot();
        soliderEx.setGun(new HandGunEx());
        soliderEx.startShoot();
    }
}
